package com.pai.gui.component;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.List;
import java.util.Vector;

import com.pai.entity.PaiTask;
/**
 * 已下载列表（mainFrame里的right栏）的数据源对象。用于保存列表的数据。数据变更会同时引起视图的重新渲染。
 * @author Jeff
 *
 */
public class DownloadTaskListModel {
	
	private Vector<DownloadTaskList> repository = new Vector<DownloadTaskList>();
	private DownloadTaskList bl;
	
	private Comparator<PaiTask> comparator=null;
	private List<PaiTask> sources=new ArrayList<PaiTask>();

	//通过list设置数据源
	public void setSources(List<PaiTask> sources) {
		//System.out.println("WorkingTaskListModel setSource");
		this.sources = sources;
	}
	
	// 添加一个单元
	public void addCell(PaiTask obj) {
		sources.add(obj);
		notifySourceRefreshEvent(sources);
	}

	// 根据索引删除一个单元
	public void removeCell(int index) {
		sources.remove(index);
		notifySourceRefreshEvent(sources);
	}

	// 根据值删除一个单元
	public void removeCell(PaiTask value) {
		sources.remove(value);
		notifySourceRefreshEvent(sources);
	}

	// 设置一个单元
	public void setCell(int index, PaiTask obj) {
		sources.set(index, obj);
		notifySourceRefreshEvent(sources);
	}

	// 获取一个单元的信息
	public PaiTask getCell(int index) {
		return sources.get(index);
	}

	// 获取所有单元信息
	public List<PaiTask> getAllCell() {
		return sources;
	}

	// 移除所有
	public void removeAll() {
		sources.clear();
		notifySourceRefreshEvent(sources);
	}
	//设置排序
	public void setSort(Comparator<PaiTask> comparator) {
		this.comparator = comparator;
		notifySourceRefreshEvent(sources);
	}
	//获取Comparator对象
	public Comparator<PaiTask> getComparator() {
		return comparator;
	}

	// 注册监听器，如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
	public void addSourceRefreshListener(DownloadTaskList list) {
		repository.addElement(list);// 这步要注意同步问题
	}

	// 如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
	public void notifySourceRefreshEvent(List<PaiTask> event) {
		Enumeration<DownloadTaskList> en = repository.elements();// 这步要注意同步问题
		while (en.hasMoreElements()) {
			bl = (DownloadTaskList) en.nextElement();
			bl.sourceRefreshEvent(event);
		}
	}
	// 删除监听器，如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
	public void removeSourceRefreshListener(DownloadTaskList srl) {
		repository.remove(srl);// 这步要注意同步问题
	}
	
	
	
	
}
